#include<iostream>
#include<vector>
#include<assert.h>

using namespace std;

template<size_t N>
class BitSet{
public:
	BitSet()
	{
		v.resize(N / 32 + 1, 0);
	}
	void Set(size_t x)
	{
		assert(x < N);

		size_t i = x / 32;//第几个桶
		size_t j = x % 32;//在桶中的位置

		v[i] |= (1 << j);//置1
	}
	void ReSet(size_t x)
	{
		assert(x < N);

		size_t i = x / 32;
		size_t j = x % 32;

		v[i] &= (~(1 << j));//置0
	}
	bool Text(size_t x)
	{
		assert(x < N);

		size_t i = x / 32;
		size_t j = x% 32;

		return v[i] & (1 << j);//是否在桶中
	}

private:
	vector<int> v;
};

//对100亿个整数，判断一个数是否在这100亿个整数中。->使用位图。
//对100亿个整数，找出指出现一次的数。用两个位图，一个位图表示出现是数，另一个位图表示不止一次的数，最后遍历第一个位图，再找第二个位图中的位置。
//两个文件中有100亿个整数，求交集。两个位图，最后最后^.
